package com.jxtc.enterprise.common.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.time.LocalDateTime;

@Getter
@Setter
@ToString
@TableName(value = "order_payment")
public class OrderPayment {
    /**
     * uuid
     */
    @TableId(type = IdType.ASSIGN_UUID)
    private String id;
    /**
     * 用户 ID
     */
    private String userId;

    private String phone;

    /**
     * 公司 ID
     * 若仅记录用户id，当用户换公司时，历史订单显示的公司也会变成新公司；当某个公司统计该公式员工历史订单数据时，会导致出问题
     */
    private String companyId;
    /**
     * 订单总金额，单位为分
     */
    private Integer totalAmount;
    /**
     * 需要给商户的总金额，单位为分
     */
    private Integer payForMerchant;
    /**
     * 用户自费金额，单位为分
     * 当钱包余额还有金额时，用户自费 0
     */
    private Integer userPaid;

    /**
     * 使用余额支付时，抵扣金额；大多数情况下，都是使用余额抵扣订单费用；只有极少数情况下，用户自己通过微信支付付费
     */
    private Integer deductionPrice;

    /**
     * 支付方式
     */
    private String paymentMethod;

    /**
     * 微信支付退款id
     */
    private String refundId;

    /**
     * 订单状态
     * 1 待支付
     * 2 待发货
     * 3 待签收
     * 4 待评价
     * 5 已取消
     * 6 售后已处理（仅针对申请售后的订单由此状态）
     */
    private Integer status;
    /**
     * 是否已经批量打印，默认值 -1，表示该数据是无效数据。
     * 1 表示已批量打印
     * 2 表示未批量打印
     * -1 表示该订单不支持批量打印，此时 company 表中 delivery_info 字段的 singlePrint 字段为 true
     */
    private Integer batchPrinted;
    /**
     * 该订单属于哪一天，记录格式: yyyy-MM-DD
     * 举例：
     * 假设该公司配置的午餐时间范围为 15:00 - 11:00，那么在 7 月 21 号下午 16:00 下的订单其实应该属于 7 月 22 号
     * 同理，假设该公司配置的午餐时间范围为 08:00 - 11:00，那么在 7 月 21 号上午 09:00 下的订单就属于 7 月 21 号
     */
    private String dateFlag;
    /**
     * 餐食类型，记录该笔订单属于 "午餐" 还是 "晚餐"，记录格式: "xx餐 开始时间 ~ 结束时间"
     * 举例："午餐 15:00 ~ 11:00"
     */
    private String mealFlag;
    /**
     * 创建时间，在创建时默认传值，不需要手动操作
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    /**
     * 更新时间，在更新时默认传值，不需要手动操作
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
